今天宠物迷的小编给各位宠物饲养爱好者分享double设置精度的宠物知识,其中也会对java中double型如何控制有效数字输出位数或精度?(java double精度多少位小数)进行专业的解释,如果能碰巧解决你现在面临的宠物相关问题,别忘了关注本站哦,现在我们开始吧!
java中 double 类型只是一个简单类型,是不能其输出位数及精度是固定的
可以利用其它方法进行位数输出,如:
public static void main(String[] args) {
// 1. 使用 String.format() 方法
double data = 11.8982389283293;
System.out.println(String.format("%.2f", data));
// 2. 使用 printf 输出
System.out.printf("%.2f", data);
// 3. 使用 DecimalFormat 对象格式化
DecimalFormat format = new DecimalFormat("#.00");
System.out.println(format.format(data));
}
使用setprecision()操作符,例如: //------------------------------------------- #include #include using std::cout; using std::setprecision; using std::endl; int main(int argc, char* argv[]) { cout<<setprecision(3)<<10/3.0<<endl;//setprecision(3)用于设定后面的输出的精度 return 0; } 扩展资料: setprecision用法 使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。 如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。 setiosflags(ios::fixed)是用定点方式表示实数。 如果与setiosnags(ios::scientific)合用, 可以控制指数表示法的小数位数。 setfill(' char ');命令用于设置要显示的填充字符,当域宽大于输出项宽度时用该字符填充多余的位。 setprecision( int);用于设置显示数字的精度的位数 参考资料来源:百度百科-setprecision
只要用浮点数 包括float, double, long double都会有精度问题
也就是值是近似值
如果近似值不够准确 需要更准确的值 可以提高精度 即float->double->long double
如果还不行 只能用自定义数据类型进行大数计算
double类型是双精度浮点数,占用8字节(Byte)即64位(bit),其精度是由32个bit的二进制尾数来确定的,因此准确精度是二进制精度而不是十进制精度,通常可以保证十进制小数点后15位有效精度和第16位的部分精度。 通过格式化方法输出double类型,可以控制小数点后的显示位数:aStr.Format("%.2f",a);在百分号后面加上.x 就是指定小数点后的显示位数。注意这种方法不是四舍五入,而是截断显示,1.239会显示为1.23; 如果需要四舍五入,在C/C++中没有专门的函数,你可以这样实现:aStr.Format("%.2f",a+0.005);再舍去位加上5,再截断的时候就等于是四舍五入了。 拓展资料: Visual Basic 支持几种 Numeric 数据类型— Integer(整型)、Long(长整型)、Single(单精度浮点型)、Double(双精度浮点型)和 Currency(货币型)。与 Variant 类型相比,Numeric 类型占用的存储空间通常要少。 如果知道变量总是存放整数(如 12 )而不是带小数点的数字(如 3.57),就应当将它声明为 Integer 类型或 Long 类型。整数的运算速度较快,而且比其它数据类型占据的内存要少。在 For...Next 循环内作为计数器变量使用时,整数类型尤为有用。 如果变量包含小数,则可将它们声明为 Single、Double 或 Currency 变量。Currency 数据类型支持小数点右面 4 位和小数点左面 15 位;它是一个精确的定点数据类型,适用于货币计算。浮点(Single 和 Double)数比 Currency 的有效范围大得多,但有可能产生小的进位误差。 浮点数值可表示为 mmmEeee 或 mmmDeee ,其中 mmm 是假数,而 eee 是指数(以 10 为底的幂)。Single 数据类型的最大正数值为 3.402823E+38,或 3.4 乘以 10 的 38 次方;Double 数据类型的最大正数值是 1.79769313486232D+308 或 1.8 乘以 10 的 308 次方。用 D 将数值文字中的假数部分和指数部分隔开,就会导致将该值作为 Double 数据类型来处理。同样,用这种方式使用 E,也会导致将该值作为 Single 数据类型来处理。 参考资料:数据类型 百度百科
是
float和double存在丢失精度的问题,精确的计算还是使用BigDecimal.
这本来就是近似的,要精度高就把π取精确点。acos(0)/3.14159265358979*180应该是90.000000°了。 #include "stdio.h"#include "math.h"int main(int argv,char *argc[]){ printf("%f\n",acos(0)/3.14159265358979*180); return 0;}运行结果:
如果是java的话,可以使用如下方式:
/**
* DecimalFormat转换最简便
*/
public void m2() {
DecimalFormat df = new DecimalFormat("#.000");
System.out.println(df.format(f));
}
java中 double 类型只是一个简单类型,是不能其输出位数及精度是固定的
可以利用其它方法进行位数输出,如:
public static void main(String[] args) {
// 1. 使用 String.format() 方法
double data = 11.8982389283293;
System.out.println(String.format("%.2f", data));
// 2. 使用 printf 输出
System.out.printf("%.2f", data);
// 3. 使用 DecimalFormat 对象格式化
DecimalFormat format = new DecimalFormat("#.00");
System.out.println(format.format(data));
}
本文由宠物迷 百科常识栏目发布,非常欢迎各位朋友分享到个人朋友圈,但转载请说明文章出处“java中double型如何控制有效数字输出位数或精度?”